package org.example.elasticsearch.query;//package com.pactera.jep.core.elasticsearch.query;
//
//import co.elastic.clients.elasticsearch._types.FieldValue;
//import co.elastic.clients.elasticsearch._types.query_dsl.Query;
//import co.elastic.clients.json.JsonData;
//import org.example.utils.Func;
//import com.pactera.jep.core.elasticsearch.ESQueryBuilder;
//
//import java.io.Serializable;
//import java.util.LinkedList;
//import java.util.List;
//
///**
// * *
// *
// * @author wanglin
// * @since 1.0
// */
//public class ESQueryWrapper2 {
//
//    private final LinkedList<Query> queries = new LinkedList<>();
//
//    // TODO 测试下，多个term会不会自动变成terms
//    public ESQueryWrapper2 term(String field, Serializable value) {
//        if (Func.isNotEmpty(value)) {
//            queries.add(Query.of(q -> q.term(x -> x.field(field).value(value.toString()))));
//        }
//        return this;
//    }
//
//    /**
//     * 满足集合中的数据就查询出来
//     *
//     * @param field
//     * @param values
//     * @return
//     */
//    public ESQueryBuilder.ESQueryWrapper terms(String field, List<?> values) {
//        if (Func.isNotEmpty(values)) {
//            List<FieldValue> list = values.stream().map(FieldValue::of).toList();
//            queries.add(Query.of(q -> q.terms(x -> x.field(field).terms(t -> t.value(list)))));
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper match(String field, Serializable value) {
//        if (Func.isNotEmpty(value)) {
//            queries.add(Query.of(q -> q.match(x -> x.field(field).query(value.toString()))));
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper match(Serializable value, String... fields) {
//        if (Func.isNotEmpty(value) && Func.isNotEmpty(fields)) {
//            for (String field : fields) {
//                queries.add(Query.of(q -> q.match(x -> x.field(field).query(value.toString()))));
//            }
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper regexp(Serializable value, String... fields) {
//        if (Func.isNotEmpty(value) && Func.isNotEmpty(fields)) {
//            for (String field : fields) {
//                queries.add(Query.of(q -> q.regexp(x -> x.field(field).value(value.toString()))));
//            }
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper wildcard(Serializable value, String... fields) {
//        if (Func.isNotEmpty(value) && Func.isNotEmpty(fields)) {
//            for (String field : fields) {
//                queries.add(Query.of(q -> q.wildcard(x -> x.field(field).value(String.format("*%s*", value)))));
//            }
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper like(Serializable value, String... fields) {
//        return wildcard(value, fields);
//    }
//
//    /**
//     * 范围查询
//     *
//     * @param field
//     * @param from
//     * @param to
//     * @return
//     */
//    public ESQueryBuilder.ESQueryWrapper range(String field, Serializable from, Serializable to) {
//        if (Func.isNotEmpty(from) || Func.isNotEmpty(to)) {
//            queries.add(Query.of(q -> q.range(x -> {
//                x.field(field);
//                if (Func.isNotEmpty(from)) {
//                    x.from(from.toString());
//                }
//                if (Func.isNotEmpty(to)) {
//                    x.to(to.toString());
//                }
//                return x;
//            })));
//        }
//        return this;
//    }
//
//    /**
//     * 查询天数
//     *
//     * @param field
//     * @param state 查询天数（1：近一天，2：近一周，3：近一个月，4：近三个月）
//     * @return
//     */
//    public ESQueryBuilder.ESQueryWrapper rangeDay(String field, String state) {
//        if (Func.isNotEmpty(state)) {
//            String gte = switch (state) {
//                case "1" -> "now-1d/d";//近一天
//                case "2" -> "now-1w/d";//近一周
//                case "3" -> "now-1M/d";//近一个月
//                case "4" -> "now-3M/d";//近三个月
//                default -> null;
//            };
//            if (Func.isNotEmpty(gte)) {
//                queries.add(Query.of(q -> q.range(x -> x.field(field).gte(JsonData.of(gte)).lt(JsonData.of("now+1d/d")))));
//            }
//        }
//        return this;
//    }
//
//    public ESQueryBuilder.ESQueryWrapper fuzzy(String field, Serializable value) {
//        if (Func.isNotEmpty(value)) {
//            queries.add(Query.of(q -> q.fuzzy(x -> x.field(field).value(value.toString()))));
//        }
//        return this;
//    }
//}
